package com.tbit.main.service;

import com.tbit.main.pojo.GeoreGion;
import com.tbit.main.pojo.GeoreGionBound;
import com.tbit.main.pojo.GeoreGionMachineCount;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @author LMY
 * @create 2020-11-23 14:06
 * 围栏分区
 */
public interface GeoreGionService {
    /**
     * 添加
     *
     * @param georeGion
     */
    void insert(GeoreGion georeGion);

    /**
     * 更新
     *
     * @param georeGion
     */
    void update(GeoreGion georeGion);

    /**
     * 删除
     *
     * @param regionId
     */
    void delete(Integer regionId);

    /**
     * 根据分区id查询
     *
     * @param regionId
     * @return
     */
    GeoreGion getByRegionId(Integer regionId);

    /**
     * 根据分区ids查询
     *
     * @param regionIds
     * @return
     */
    List<GeoreGion> getByRegionIds(Collection<Integer> regionIds);

    /**
     * 根据平台账户id查询
     *
     * @param accountId
     * @return
     */
    List<GeoreGion> getByAccountId(Integer accountId);

    /**
     * 根据平台账户ids查询
     *
     * @param accountIds
     * @return
     */
    List<GeoreGion> getByAccountIds(List<Integer> accountIds);

    /**
     * 根据运维人员id查询
     *
     * @param accountUserId
     * @return
     */
    List<Integer> getByAccountUserId(Integer accountUserId);

    /**
     * 根据运维人员id查询
     *
     * @param accountUserId
     * @return
     */
    List<GeoreGion> getAccountUserId(Integer accountUserId);

    /**
     * 根据运维人员ids查询
     *
     * @param accountUserIds
     * @return
     */
    List<Map<String, Object>> getAccountUserIds(List<Integer> accountUserIds);

    /**
     * 根据分区id查询
     *
     * @param regionId
     * @return
     */
    List<Map<String, Object>> getRegionIdsUserId(List<Integer> regionId);

    /**
     * 查询所有
     *
     * @return
     */
    List<GeoreGion> getAll();

    /**
     * 查询所有分区，区域id
     *
     * @return
     */
    List<Integer> getAccountId();


    /**
     * 查询所有分区，区域id
     *
     * @return
     */
    List<Integer> getAccountIdUpdate(String updateTime);

    /**
     * 查询所有分区，区域id
     *
     * @return
     */
    List<Integer> getRegionId();

    /**
     * 统计站点投放车辆数量
     *
     * @param accountId
     * @return
     */
    List<GeoreGionMachineCount> groupByGeoreGion(Integer accountId);

    /**
     * 绑定分区
     *
     * @param georeGionBound
     */
    void binding(GeoreGionBound georeGionBound);

    /**
     * 批量绑定分区
     *
     * @param map
     */
    void bindingBatch(List<Map<String, Object>> map);

    /**
     * 解绑分区
     *
     * @param georeGionBound
     */
    void unbind(GeoreGionBound georeGionBound);

    /**
     * 修改分区负责人
     *
     * @param accountId
     * @param regionId
     * @param accountUserId
     * @param isLeader
     */
    void updateUnbind(Integer accountId, Integer regionId, Integer accountUserId, Integer isLeader);

    /**
     * 获取绑定分区信息
     *
     * @param regionId
     * @param accountUserId
     * @return
     */
    List<GeoreGionBound> getGeoreGionBound(Integer regionId, Integer accountUserId, Integer isLeader);

    /**
     * 获取绑定分区信息
     *
     * @param regionId
     */
    List<GeoreGionBound> getBoundRegionIds(List<Integer> regionId);

    /**
     * 查询分区人数
     *
     * @param regionId
     * @return
     */
    List<Map<String, Object>> getGroupRegionId(List<Integer> regionId);

    /**
     * 根据车辆id和人员id查询
     *
     * @param accountUserId
     * @param machineId
     * @return
     */
    Integer getMachineIdUserId(Integer accountUserId, Integer machineId);

    /**
     * 查询所有绑定
     *
     * @return
     */
    List<Map<String, Object>> getBoundAll();

    /**
     * 根据accountId和名称查询分区
     *
     * @param accountId  区域id
     * @param regionName 分区名称
     */
    GeoreGion getByGeoRegionName(Integer accountId, String regionName);
}